#include <windows.h>
#include<stdlib.h>
#include<GL/glut.h>
#include<GL/gl.h>
#include<fstream>
#include<string>
#include<string.h>
#include<stdio.h>
#include <sstream>
#include<iostream>
#include <iomanip>
using namespace std;
float **p ;
void init(void)
{
    glClearColor(1.0,1.0,1.0,0.0);
    glColor3f(0,0,1);
    glPointSize(1);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(0,2102,0,2102);
}

void eto()
{
    int pointColor=0;
    int x=0,y=0;
    int maxY=0,minY=0;
    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_POINTS);
    string n,s;
    int j=0,i=0,bbb,ccc,d;
    bbb=1;
    float aaa=0;
    char * pch;
    float point[2][3];
    int count=0;
    float **dd;

    int xx,yy;
    //p=(float *)calloc(4416000,sizeof(float));
    //float poi[3000][2500];

    ifstream inFile("Asia70by70deg2mins.xyz");
    p= (float **)malloc(sizeof(float) * 2102);
    dd= (float **)malloc(sizeof(float) * 400);
    if(!inFile.is_open())
    {
        cout<<"not file";
    }
    p[0]= (float *)malloc(sizeof(float) * 2102);
    while(!inFile.eof())
    {

        getline(inFile,n);
        //inFile >> n;
        s=n;
        pch=strtok(&s[0]," ,");
        while(pch !=NULL)
        {

            point[i][j]=atof(pch) ;
            //cout<<point[i][j]<<"\n";
            pch = strtok (NULL, " ,");
            j++;
        }
        d=i;
        i++;
        j=0;

        /*
        if(point[d][2]>maxY)
        {
            maxY=point[d][2];
        }
        else if(point[d][2]<minY)
        {
            minY=point[d][2];
        }
        //*/
        if(i==2)
        {
            i=0;
            // ccc=aaa;
            //aaa=bbb;
            //bbb=ccc;
        }
//*/

        if(aaa>point[d][1])
        {
            x++;
            p[x]= (float *)malloc(sizeof(float) * 2102);
            y=0;
        }
        aaa=point[d][1];
        if(x>maxY)
        {
            maxY=x;
            minY=count;
        }
       p[x][y]=point[d][2];
//        //poi[x][y]=point[d][2];
//        if(p[x][y]>=0)
//        {
//
//
//            pointColor=((p[x][y]-0)/(8000-0))*510;
//            //cout<<pointColor<<"\n";
//            if(pointColor>=0&&pointColor<=255)
//            {
//
//                glColor3ub(pointColor,128+(pointColor/2),0);
//                glVertex2d(y,2102-x);
//
//
//            }
//            else if(pointColor<=510)
//            {
//                glColor3ub(510-pointColor,510-pointColor,0);
//                glVertex2d(y,2102-x);
//                //cout<<pointColor<<"\n";
//
//
//            }
//            else if(pointColor>510)
//            {
//                glColor3ub(0,0,0);
//                glVertex2d(y,2102-x);
//
//            }
//        }
//        else
//        {
//            pointColor=((-1*p[x][y]-0)/(6000-0))*128;
//            if(pointColor<=128)
//            {
//                glColor3ub(0,128-pointColor,128);
//                glVertex2d(y,2102-x);
//            }
//            else if(pointColor>128)
//            {
//
//                glColor3f(0,0,1);
//                glVertex2d(y,2102-x);
//            }
//
//
//        }
        y++;
        count++;
    }





    cout<<"max:"<<maxY<<"\nmin:"<<minY;
    for(int xx=1200; xx<=1600; xx++)
    {
        dd[xx]= (float *)malloc(sizeof(float) * 2102);
        for(int yy=1600; yy<=2000; yy++)
        {
            dd[xx][yy]=  p[xx][yy];
           // cout<<dd[xx][yy]<<"\n";
           // dd[xx][yy]=point[d][2];
            //poi[x][y]=point[d][2];
            if(dd[xx][yy]>=0)
            {


                pointColor=((dd[xx][yy]-0)/(8000-0))*510;
                //cout<<pointColor<<"\n";
                if(pointColor>=0&&pointColor<=255)
                {

                    glColor3ub(pointColor,128+(pointColor/2),0);
                    glVertex2d(yy,xx);


                }
                else if(pointColor<=510)
                {
                    glColor3ub(510-pointColor,510-pointColor,0);
                    glVertex2d(yy,xx);
                    //cout<<pointColor<<"\n";


                }
                else if(pointColor>510)
                {
                    glColor3ub(0,0,0);
                    glVertex2d(yy,xx);

                }
            }
            else
            {
                pointColor=((-1*dd[xx][yy]-0)/(6000-0))*128;
                if(pointColor<=128)
                {
                    glColor3ub(0,128-pointColor,128);
                    glVertex2d(yy,xx);
                }
                else if(pointColor>128)
                {

                    glColor3f(0,0,1);
                    glVertex2d(yy,xx);

                }
            }
        }
    }
    glEnd();
    glFlush();
}

int main(int argc, char *argv[])
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
    glutInitWindowSize(2102,2102);
    glutCreateWindow("solar");
    init();
    //ifstream myfile ("Etopo.txt");
    glutDisplayFunc(eto);
    glutMainLoop();
    return 0;
}
